package main

import (
	"fmt"
	"github.com/jinzhu/gorm"
	_ "github.com/jinzhu/gorm/dialects/mysql"
)

//2.1定义模型
type User struct {
	gorm.Model //ID CreateAt UpdateAt  DeletedAt
	Name       string
	Age        int64
	Active     bool
}

func main() {
	//1.连接mysql数据库
	db, err := gorm.Open("mysql", "root:123456@(127.0.0.1)/db1?charset=utf8&parseTime=True&loc=Local")
	if err != nil {
		panic(err)
	}
	defer db.Close()

	//3.把模型与数据库中的表对应起来
	db.AutoMigrate(&User{})

	//4.1创建 插入数据
	//u := User{Name: "qimi", Age: 30, Active: true}
	//db.Create(&u) //在数据库中创建了一条记录
	//
	//u1 := User{Name: "qimi12", Age: 40, Active: true}
	//db.Create(&u1) //在数据库中创建了一条记录

	//5查询
	var user User
	db.First(&user)
	fmt.Printf("%#v \n", user)
	//6.更新
	//user.Name = "qimi34"
	//user.Age = 50
	//db.Debug().Save(&user) //默认会修改所有的字段

	//db.Debug().Model(&user).Update("name","小王子") //修改指定字段

	//m1 := map[string]interface{}{
	//	"name":   "wsx",
	//	"age":    100,
	//	"active": false,
	//}
	//db.Model(&user).Updates(m1) //m1列出所有的字段都会更新
	//db.Debug().Model(&user).Select("age").Update(m1) //只更新age字段
	//db.Debug().Model(&user).Omit("active").Update(m1) //只不更新name字段

	//db.Debug().Model(&user).UpdateColumn("age",5) //不修改 UpdatedAt

	//rowsNum:=db.Debug().Model(&user).Updates(User{Name: "wsx", Age: 90}).RowsAffected
	//fmt.Println(rowsNum)

	//让users表中所有用户的年龄在原来的基础上加2
	db.Debug().Model(&User{}).Update("age", gorm.Expr("age+?", 2))
}
